//
// Created by 33145 on 2023/6/8.
//

#ifndef ROCKET_TINYPB_PROTOCOL_H
#define ROCKET_TINYPB_PROTOCOL_H

#include <string>
#include "abstract_protocol.h"

namespace rocket {
  struct TinyPBProtocol : public AbstractProtocol {
  public:
    typedef std::shared_ptr<TinyPBProtocol> ptr;

    TinyPBProtocol() = default;

    ~TinyPBProtocol() override = default;

  public:
    static char PB_START;
    static char PB_END;

  public:
    int32_t _pk_len{0};           // 整包长度
    int32_t _msg_id_len{0};       // MsgID长度
    // msg_id 继承父类

    int32_t _method_name_len{0};  // 方法名长度
    std::string _method_name;      // 方法名
    int32_t _err_code{0};         // 错误码
    int32_t _err_info_len{0};     // 错误码长度
    std::string _err_info;         // 错误码信息
    std::string _pb_data;          // 序列化数据
    int32_t _check_sum{0};        // 校验码

    bool parse_success{false};     // 解析结果

  };
}
#endif //ROCKET_TINYPB_PROTOCOL_H
